{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Neural Turing Machines: Tutorial\n",
    "\n",
    "When Neural Networks started showing some marvellous results, two arguments came into picture to showcase their inefficieny.\n",
    "1. Neural networks with fixed-size inputs are seemingly unable to solve problems with variable-size inputs.\n",
    "2. Neural networks seem unable to store values to specific locations in data structures/memory.\n",
    "\n",
    "First problem got resolved with the introduction of RNN(Recurrent Neural Networks), Whereas second problem's solution of using neural network with memory was proposed by a system called Neural Turing Machine \n",
    "\n",
    "\n",
    "As discussed above, A NTM is composed of two important things: a neural network, also known as controller, and a 2D matrix called memory. In this tutorial we will implement a simplistic version of both, and try to showcase copy task."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"Images/ntm_architecture.png\" width=\"500\"/>\n",
    "NTM Architecture\n",
    "<img src=\"Images/NTM.png\" width=\"800\"/>\n",
    "Controller and Memory connection"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### COPY task for NMTs.\n",
    "\n",
    "We will perform copy task for NMTs. NMTs are powerful at performing algrothmic tasks which need to store and access information in memory and Copy task is perfect example of it. In this exercise how well NTM perfoems on Copy task.\n",
    "\n",
    "The task is as follows:\n",
    "* The NTM model is shown a random k-dimenstional vector for T-time steps.\n",
    "* The job of the network is output these T k-dimensional random vectors from zero-vectors at each time step."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 1: Import libraries "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "from torch import nn\n",
    "import torch.nn.functional as F\n",
    "import numpy as np\n",
    "from time import time\n",
    "import torchvision.utils as vutils\n",
    "from torch.utils.data import Dataset\n",
    "from torch.utils.data import DataLoader\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 2: Implement Controller\n",
    "As part of the controller, we will be implementing the following three components:\n",
    "\n",
    "* A two-layer feedforward network. \n",
    "* Weight initialization using Xavier Approach.\n",
    "* Sigmoid non-linearity\n",
    "\n",
    "Note: We can have an LSTM controller as well, bue due to simplicity we build 2-layer fully connected controller. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Controller(nn.Module):\n",
    "    def __init__(self, input_size, output_size, hidden_size):\n",
    "        super(Controller, self).__init__()\n",
    "        self.layer1 = nn.Linear(input_size, hidden_size)\n",
    "        self.layer2 = nn.Linear(hidden_size, output_size)\n",
    "        self.intialize_parameters()\n",
    "\n",
    "    def intialize_parameters(self):\n",
    "        # Initialize the weights of linear layers\n",
    "        nn.init.xavier_uniform_(self.layer1.weight, gain=1) # gain is set to 1 with sigmoid function\n",
    "        nn.init.normal_(self.layer1.bias, std=0.01)\n",
    "        nn.init.xavier_uniform_(self.layer2.weight, gain=1)\n",
    "        nn.init.normal_(self.layer2.bias, std=0.01)\n",
    "\n",
    "    def forward(self, x, last_read):\n",
    "        # Forward pass operation, depending on last_read operation\n",
    "        x = torch.cat((x, last_read), dim=1)\n",
    "        x = torch.sigmoid(self.layer1(x))\n",
    "        x = torch.sigmoid(self.layer2(x))\n",
    "        return x"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 3: Implement Memory\n",
    "\n",
    "* Memory M is a 2-D matrix, with M rows, and N columns\n",
    "* the function address() does the the memory addressing which is composed of four functions\n",
    "    * similarity\n",
    "    * interpolation\n",
    "    * shifting\n",
    "    * sharpening\n",
    "    \n",
    "<img src=\"Images/ntm_equation.png\" width=\"500\"/>\n",
    "Equations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class Memory(nn.Module):\n",
    "    def __init__(self, M, N, controller_out):\n",
    "        super(Memory, self).__init__()\n",
    "        self.N = N\n",
    "        self.M = M\n",
    "        self.read_lengths = self.N + 1 + 1 + 3 + 1\n",
    "        self.write_lengths = self.N + 1 + 1 + 3 + 1 + self.N + self.N\n",
    "        self.w_last = [] # define to keep track of weight_vector at each time step.\n",
    "        self.reset_memory()\n",
    "\n",
    "    def get_weights(self):\n",
    "        return self.w_last\n",
    "\n",
    "    def reset_memory(self):\n",
    "        # resets the memory for both read and write operations at start of new sequence (new input)\n",
    "        self.w_last = []\n",
    "        self.w_last.append(torch.zeros([1, self.M], dtype=torch.float32))\n",
    "\n",
    "    def address(self, k, beta, g, s, gamma, memory, w_last):\n",
    "        # Content focus\n",
    "        wc = self._similarity(k, beta, memory) # CB1 to CB3 equations\n",
    "        # Location focus\n",
    "        wg = self._interpolate(wc, g, w_last) # CS1 equation\n",
    "        w_hat = self._shift(wg, s) # CS2 and CS3 equation\n",
    "        w = self._sharpen(w_hat, gamma) # S1 equation\n",
    "        return w\n",
    "\n",
    "    # Implementing Similarity on basis of CB1 followed by CB2 and CB3 Equation\n",
    "    def _similarity(self, k, beta, memory):\n",
    "        w = F.cosine_similarity(memory, k, -1, 1e-16) # CB1 Equation\n",
    "        w = F.softmax(beta * w, dim=-1) # CB2 and CB3 Equation\n",
    "        return w # return CB3 equation obtained weights\n",
    "    \n",
    "    # Implementing CS1 Equation. It decides whether to use the weights we obtained\n",
    "    # at the previous time step w_last or use the weight obtained through similarity(content focus)\n",
    "    def _interpolate(self, wc, g, w_last):\n",
    "        return g * wc + (1 - g) * w_last\n",
    "    \n",
    "    # We will use Convolve shift for moving the head position.Each head gives shift weight s, \n",
    "    # to give us a distribution over which allowable integer shifts are performed.\n",
    "    def _shift(self, wg, s):\n",
    "        result = torch.zeros(wg.size())\n",
    "        result = self._convolve(wg, s)\n",
    "        return result\n",
    "    \n",
    "    #  because of the shift, weights focused at a single location will be dispersed into other locations, \n",
    "    # to mitigate this effect, sharpening was performed\n",
    "    def _sharpen(self, w_hat, gamma):\n",
    "        w = w_hat ** gamma\n",
    "        w = torch.div(w, torch.sum(w, dim=-1) + 1e-16)\n",
    "        return w\n",
    "    \n",
    "    # convolution shift\n",
    "    def _convolve(self, w, s):\n",
    "        b, d = s.shape\n",
    "        assert b == 1, 'does _convolve work for b != 1?'\n",
    "        assert d == 3\n",
    "        w = torch.squeeze(w)\n",
    "        t = torch.cat([w[-1:], w, w[:1]])\n",
    "        c = F.conv1d(t.view(1, 1, -1), s.view(1, 1, -1)).view(b, -1)\n",
    "        return c"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 4: Implementing Read Operation\n",
    "Here, We will define read heads which access memory and updates memory according to read operations we discuss in chapter above.\n",
    "\n",
    "<img src=\"Images/read_write_NTM.png\" width=\"500\"/>\n",
    "Read and Write Equations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class ReadHead(Memory):\n",
    "\n",
    "    def __init__(self, M, N, controller_out):\n",
    "        super(ReadHead, self).__init__(M, N, controller_out)\n",
    "        self.fc_read = nn.Linear(controller_out, self.read_lengths)\n",
    "        self.intialize_parameters();\n",
    "    \n",
    "    # Initialize the linear layers\n",
    "    def intialize_parameters(self):\n",
    "        nn.init.xavier_uniform_(self.fc_read.weight, gain=1.4)\n",
    "        nn.init.normal_(self.fc_read.bias, std=0.01)\n",
    "    \n",
    "    # Reading based on R2 equation\n",
    "    def read(self, memory, w):\n",
    "        return torch.matmul(w, memory)\n",
    "    \n",
    "    # Use Memory class we formed above to create a ReadHead operation\n",
    "    def forward(self, x, memory):\n",
    "        param = self.fc_read(x) # gather parameters\n",
    "        # initialize necessary parameters k, beta, g, shift, and gamma\n",
    "        k, beta, g, s, gamma = torch.split(param, [self.N, 1, 1, 3, 1], dim=1)\n",
    "        k = torch.tanh(k)\n",
    "        beta = F.softplus(beta)\n",
    "        g = torch.sigmoid(g)\n",
    "        s = F.softmax(s, dim=1)\n",
    "        gamma = 1 + F.softplus(gamma) \n",
    "        # obtain current weight address vectors from Memory\n",
    "        w = self.address(k, beta, g, s, gamma, memory, self.w_last[-1])\n",
    "        # append in w_last function to keep track, while weighing content based\n",
    "        # or location based weights\n",
    "        self.w_last.append(w)\n",
    "        # obtain current mem location based on R2 equation\n",
    "        mem = self.read(memory, w)\n",
    "        return mem, w\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Step 5: Implement Write Operation\n",
    "Similar to Read Operation, here we will implement write operation.\n",
    "\n",
    "Note: Both read and write heads use fully connected layer to produce paremeters (k, beta, g, s, gamma) for content addressing. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class WriteHead(Memory):\n",
    "\n",
    "    def __init__(self, M, N, controller_out):\n",
    "        super(WriteHead, self).__init__(M, N, controller_out)\n",
    "        self.fc_write = nn.Linear(controller_out, self.write_lengths)\n",
    "        self.intialize_parameters()\n",
    "\n",
    "    def intialize_parameters(self):\n",
    "        # Initialize the linear layers\n",
    "        nn.init.xavier_uniform_(self.fc_write.weight, gain=1.4)\n",
    "        nn.init.normal_(self.fc_write.bias, std=0.01)\n",
    "\n",
    "    def write(self, memory, w, e, a):\n",
    "        # Implement write function based on E1 and A1 Equation\n",
    "        w, e, a = torch.squeeze(w), torch.squeeze(e), torch.squeeze(a)\n",
    "        \n",
    "        erase = torch.ger(w, e)\n",
    "        m_tilde = memory * (1 - erase) # E1 equation\n",
    "        \n",
    "        add = torch.ger(w, a)\n",
    "        memory_update = m_tilde + add # A1 equation\n",
    "\n",
    "        return memory_update\n",
    "\n",
    "    def forward(self, x, memory):\n",
    "        param = self.fc_write(x) # gather parameters\n",
    "        # initialize necessary parameters k, beta, g, shift, and gamma\n",
    "        k, beta, g, s, gamma, a, e = torch.split(param, [self.N, 1, 1, 3, 1, self.N, self.N], dim=1)\n",
    "        k = torch.tanh(k)\n",
    "        beta = F.softplus(beta)\n",
    "        g = torch.sigmoid(g)\n",
    "        s = F.softmax(s, dim=-1)\n",
    "        gamma = 1 + F.softplus(gamma)\n",
    "        a = torch.tanh(a)\n",
    "        e = torch.sigmoid(e)\n",
    "        # obtain current weight address vectors from Memory\n",
    "        w = self.address(k, beta, g, s, gamma, memory, self.w_last[-1])\n",
    "        # append in w_last function to keep track, while weighing content based\n",
    "        # or location based weights\n",
    "        self.w_last.append(w)\n",
    "        # obtain current mem location based on R2 equation\n",
    "        mem = self.write(memory, w, e, a)\n",
    "        return mem, w\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 6: Implement Neural Turing Machine Structure, which includes:\n",
    "1. fully connected controller\n",
    "2. read and write heads\n",
    "3. memory paramters\n",
    "4. utility functions to operate on memory which is not trainable\n",
    "\n",
    "Note: In the forward function, X can be none. This is because in Copy task, training happens in two steps for one particular sequence\n",
    "* In the first step, the network is shown k-dimensional input for t time steps. \n",
    "* In the second step (prediction step), the network takes in k-dimensional zeros vector to produce predictions which performs copy of the input for each time step."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class NTM(nn.Module):\n",
    "    def __init__(self, M, N, num_inputs, num_outputs, controller_out_dim, controller_hid_dim):\n",
    "        super(NTM, self).__init__()\n",
    "        # initialize number of input and outputs for the controller\n",
    "        self.num_inputs = num_inputs\n",
    "        self.num_outputs = num_outputs\n",
    "        # Define size of matrix\n",
    "        self.M = M\n",
    "        self.N = N\n",
    "        # Initialize Memory\n",
    "        self.memory = torch.zeros(self.M, self.N)\n",
    "        self.last_read = torch.zeros(1, self.N) # Initialize size of last_read\n",
    "        # Intialize Other components, Controller, read_head, and write_head\n",
    "        self.controller = Controller(self.num_inputs + self.N, controller_out_dim, controller_hid_dim)\n",
    "        self.read_head = ReadHead(self.M, self.N, controller_out_dim)\n",
    "        self.write_head = WriteHead(self.M, self.N, controller_out_dim)\n",
    "        \n",
    "        self.fc_out = nn.Linear(self.num_inputs + N, self.num_outputs)\n",
    "        self.intialize_parameters()\n",
    "    \n",
    "    def intialize_parameters(self):\n",
    "        # Initialize the linear layers\n",
    "        nn.init.xavier_uniform_(self.fc_out.weight, gain=1.4)\n",
    "        nn.init.normal_(self.fc_out.bias, std=0.5)\n",
    "\n",
    "    def forward(self, X=None):\n",
    "        if X is None:\n",
    "            X = torch.zeros(1, self.num_inputs)\n",
    "        # initialize controller\n",
    "        controller_out = self.controller(X, self.last_read)\n",
    "        # operate the read and write operation\n",
    "        self._read_write(controller_out)\n",
    "        # use updated last_read to get sequence\n",
    "        out = torch.cat((X, self.last_read), -1)\n",
    "        out = torch.sigmoid(self.fc_out(out))\n",
    "\n",
    "        return out\n",
    "\n",
    "    def _read_write(self, controller_out):\n",
    "        # Read Operation\n",
    "        read, w = self.read_head(controller_out, self.memory)\n",
    "        self.last_read = read\n",
    "        # Write Operation\n",
    "        mem, w = self.write_head(controller_out, self.memory)\n",
    "        self.memory = mem\n",
    "\n",
    "    def initalize_state(self):\n",
    "        # reset memory of all the components\n",
    "        stdev = 1 / (np.sqrt(self.N + self.M))\n",
    "        self.memory = nn.init.uniform_((torch.Tensor(self.M, self.N)), -stdev, stdev)\n",
    "        self.last_read = torch.tanh(torch.randn(1, self.N))\n",
    "        self.read_head.reset_memory()\n",
    "        self.write_head.reset_memory()\n",
    "\n",
    "    def get_memory_info(self):\n",
    "        # get all weights\n",
    "        return self.memory, self.read_head.get_weights(), self.write_head.get_weights()\n",
    "\n",
    "    def calculate_num_params(self):\n",
    "        # Returns the total number of parameters.\n",
    "        num_params = 0\n",
    "        for p in self.parameters():\n",
    "            num_params += p.data.view(-1).size(0)\n",
    "        return num_params\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Step 7: Generate a random sequence data to test COPY task\n",
    "Here, we are generating a random sequence of vectors for COPY task. It is to be copied by NTM Model. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class BinaySeqDataset(Dataset):\n",
    "\n",
    "    def __init__(self, sequence_length, token_size, training_samples):\n",
    "        self.seq_len = sequence_length\n",
    "        self.seq_width = token_size\n",
    "        self.dataset_dim = training_samples\n",
    "\n",
    "    def _generate_seq(self):\n",
    "        # A special token is appened at beginning and end of each\n",
    "        # sequence which marks sequence boundaries.\n",
    "        seq = np.random.binomial(1, 0.5, (self.seq_len, self.seq_width))\n",
    "        seq = torch.from_numpy(seq)\n",
    "        # Add start and end token\n",
    "        inp = torch.zeros(self.seq_len + 2, self.seq_width)\n",
    "        inp[1:self.seq_len + 1, :self.seq_width] = seq.clone()\n",
    "        inp[0, 0] = 1.0\n",
    "        inp[self.seq_len + 1, self.seq_width - 1] = 1.0\n",
    "        outp = seq.data.clone()\n",
    "\n",
    "        return inp.float(), outp.float()\n",
    "\n",
    "    def __len__(self):\n",
    "        return self.dataset_dim\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "        inp, out = self._generate_seq()\n",
    "        return inp, out"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We will also implement Gradient clipping as its generally a good idea to clip gradients so that the network is numerically stable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def clip_grads(net, min_grad=-10,max_grad=10):\n",
    "    parameters = list(filter(lambda p: p.grad is not None, net.parameters()))\n",
    "    for p in parameters:\n",
    "        p.grad.data.clamp_(min_grad,max_grad)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Initialize Parameters for Training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "memory_capacity=64\n",
    "memory_vector_size=128\n",
    "controller_output_dim=256\n",
    "controller_hidden_dim=512\n",
    "learning_rate=1e-2\n",
    "\n",
    "sequence_length, token_size, training_samples = 300, 10, 99\n",
    "min_grad, max_grad = -10, 10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Start training"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "iteration: 0, Loss:0.8426761627197266 \n",
      "iteration: 10, Loss:0.7067376971244812 \n",
      "iteration: 20, Loss:0.6995956897735596 \n",
      "iteration: 30, Loss:0.6954146027565002 \n",
      "iteration: 40, Loss:0.6948999762535095 \n",
      "iteration: 50, Loss:0.6939193606376648 \n",
      "iteration: 60, Loss:0.693541407585144 \n",
      "iteration: 70, Loss:0.6929903030395508 \n",
      "iteration: 80, Loss:0.6933403611183167 \n",
      "iteration: 90, Loss:0.6929323673248291 \n"
     ]
    }
   ],
   "source": [
    "# Initialize the dataset\n",
    "dataset = BinaySeqDataset(sequence_length, token_size, training_samples)\n",
    "# Initialize the dataloader with batchsize\n",
    "dataloader = DataLoader(dataset, batch_size=1,shuffle=True, num_workers=4)\n",
    "# Initialize the Model\n",
    "model = NTM(M=memory_capacity,\n",
    "            N=memory_vector_size,\n",
    "            num_inputs=token_size,\n",
    "            num_outputs=token_size,\n",
    "            controller_out_dim=controller_output_dim,\n",
    "            controller_hid_dim=controller_hidden_dim\n",
    "            )\n",
    "\n",
    "criterion = torch.nn.BCELoss()\n",
    "# We can use Adam too.\n",
    "optimizer = torch.optim.RMSprop(model.parameters(), lr=learning_rate)\n",
    "losses = []\n",
    "\n",
    "# Train the Model\n",
    "for e, (X, Y) in enumerate(dataloader):\n",
    "    tmp = time()\n",
    "    model.initalize_state()\n",
    "    optimizer.zero_grad()\n",
    "\n",
    "    inp_seq_len = sequence_length + 2\n",
    "    out_seq_len = sequence_length\n",
    "\n",
    "    X.requires_grad = True\n",
    "\n",
    "    # Forward Pass: Feed the Sequence\n",
    "    for t in range(0, inp_seq_len):\n",
    "        model(X[:, t])\n",
    "\n",
    "    # Predictions: Obtain the already feeded sequence\n",
    "    y_pred = torch.zeros(Y.size())\n",
    "    for i in range(0, out_seq_len):\n",
    "        y_pred[:, i] = model() # Here, X is passed as None\n",
    "    \n",
    "    # Optimize\n",
    "    loss = criterion(y_pred, Y)\n",
    "    loss.backward()\n",
    "    clip_grads(model)\n",
    "    optimizer.step()\n",
    "    losses += [loss.item()]\n",
    "    if (e%10==0):\n",
    "        print(\"iteration: {}, Loss:{} \".format(e, loss.item()))\n",
    "    # Train it for 5000 iterations. \n",
    "    if e == 300:\n",
    "        break"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Define a plot signal function and Plot Training Loss"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x128a1a1d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def plot_signal(grid_image, fig_size=(500,100)):\n",
    "    plt.figure(figsize=fig_size)\n",
    "    plt.imshow(grid_image.data.permute(2, 1, 0))\n",
    "\n",
    "plt.plot(losses)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Test the NTM Model's COPY Task\n",
    "Here, we create a random signal of 300 time steps and see how well the model copies this signal."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "X, Y = dataset._generate_seq()\n",
    "X, Y = X.unsqueeze(0), Y.unsqueeze(0)# Add the batch dimension\n",
    "\n",
    "model.initalize_state()\n",
    "\n",
    "for t in range(0, inp_seq_len):\n",
    "    model(X[:, t])\n",
    "\n",
    "y_pred = torch.zeros(Y.size())\n",
    "for i in range(0, out_seq_len):\n",
    "    y_pred[:, i] = model()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this step, you will observe the copy task output. These two signals should be very close, if they aren't we suggest you to train more."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x129548908>"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nZjXuqbFTjXtq1ZhfI3ua5/0Bz9xO7qDx7563N68xP+bIbp6bsK/G7FrfXuNcjfk1asyuVWOnGmdq\n1Lgnb2+e/OY07qlVY36NGvfU2PPGPSWdu2pkT9xB453y9vYmP67W2KnG2zmrb5sAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANzRWDwAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAQDJWDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nQDJWDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJW\nDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAyVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAy\nVg8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJWDwAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMlYPAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBynOd5/S89jut/Kd+ap6en1SO8Z4yxeoT3NO6pUWN2\n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\nd+pcnVsGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuJm5OwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAydwdAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAACSzhs+AAAgAElEQVQAAAAAAAAAAAAAAIBk7g4AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQDJ3BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAgmbsDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAJDM3QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nSObuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkc3cAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJK5OwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAydwdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAIBk7g4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAQDJ3BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgmbsD\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDM3QEAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASObuAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkc3cAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAJK5OwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAydwdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIBk7g4AAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAgqe4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAACTVHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACApLoD\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJBUdwAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkuoOAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBS3QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAASKo7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAABJdQcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIKnuAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAk1R0AAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKS6AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAACQVHcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAJLqDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAUt0B\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEiqOwAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASXUHAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCp7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAJNUdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAICkugMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkFR3AAAAAAAA\n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\nOwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyewOAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAyuwMAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkMzuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAkszsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAMnsDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMrsDAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDM7gAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJLM7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADJ7A4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAQDK7AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ\nzO4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSzOwAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyewOAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAyuwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAkMzuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAkszsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnsDgAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMrsDAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJDM7gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAJLM7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAADJ7A4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nQDK7AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQzO4AAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSzOwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyewOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAEAyuwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAkMzuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkszsA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMnsDgAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMrsDAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJC82R3gyV5eXnZH+J9mZneEdzRmat1fm8bdJb25eF3j22vt\nU+OsGrXujzWNPdcp2MM94Al0iqs13s5G3t66xk7Z33019qlV46wa317jnFo17o81dsfVGjvVeM8b\nM8HV9Pze3HPYo/HttXITuFLr29Pz+2rsVGufGmfVqHV/bVr71Li/1lnxusY+tdLzNea0zvu7Lz2/\nt8a315ipUeucGm9C46wa58S6xk5xX+4BV3Oj7q3xJjR2ypzWNc6qUev+4EPXeKNa70HjrFjT2KnW\nPjXOqlHjnBo71TinpHNWcLXW9wdXarznjW/PnLia/a1pfHutGjvVuD9zWtM4p8SsuFbr7vScKzX2\niXXe3prWnjfmauxU45waNe6Oe/P2eILG2+nt3Vtjp+BqjXfK2+NqjT3n3hrvVGPPGzO10imeQKfW\nNN6DRq19atxf46wa58S6xk41aux54+4aM7FOz9c0Zko698eaxk7pE1dr7Dn31nin9Pze7O++Gu9B\nKz2/Lz2/N29vjZ6v06k1jZ1q3Z1ZrWmcE+t0ak3jnBo17i7p3F/rrNqY0zo9v1bfNAEAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeaHYHAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCZ3QEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAASGZ3AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAACS2R0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGR2BwAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgmd0BAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhmdwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAktkdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAIBkdgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nIJndAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIZncAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJLZHQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAZHYHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAACCZlY+O4/jFcRx/Po7jT8dx/Oo4jq+/72AAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATzKvfXAcx3eS/DzJ2/M8v5fka0l+8r6DAQAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADzJLH73Jsk3juN4k+SjJH9/f5EA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAnmde++A8z78l+WWSz5L8\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACS2R0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAgGR2BwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAgmd0BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEhmdwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAktkdAAAAAAAAAAAAAID/tHMH\noZbWZRzHf8+r1aKCDEsGk5KYRbaZREQQwjbluJlaBOOiJAJbjFDQxtrUsk0FQQlFgwaVCCa5kDRE\ncFVpMajTIA1lNTk4RVBBUIw9Lc4bXKZ77p3uvd3/PcfPB4Zzz3vPXL77H88BAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAABIptEBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAACTT6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nkml0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJNDoAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgGQaHQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAMo0OAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAACCZRgcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAkEyjAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIptEB\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACTT6AAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkml0AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJNDoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108d43940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nAAAAAAAAAAAAkHQ6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICk\n0wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJ0OAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACDpdAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASacDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAEg6HQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAABA0ukAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJJOBwAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQdDoAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgKTTAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAknQ4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAIOl0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABJpwMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDodAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDS6QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAkk4HAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAJB0OgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA\npNMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACSdDgAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6XQAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAID/vT5kVFXPJ7mT5NO11ufbJgEAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsT583qKpK8nGSs7XWB9snAQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOxPH7C5nuTtJDeq6vsn36sbdwEAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADsytF5g7XWN0nqGbQAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7FZPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAACQ9HQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAElPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ9HQA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElPBwAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ9HQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAACQ9HQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAElPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ9HQAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAElPBwAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQ9HQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAElPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAACQHG1x9MGDB7l27doWpwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAD+l3o6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nSHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICk\npwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAASHo6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAICkpwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASHo6AAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICkpwMAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASI62OHp8fJwrV65scRoAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgP+Xhw4cH7XrjDgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAO0NMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgfXN7e/vLWuv8rl3/HzEAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/LeeDgAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg\n6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAg6ekAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAJKeDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAgOexx9OzsLBcXF3ucBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAHivXF5ebtr1zh0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\n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\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD1JPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAACQ9HQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAElPBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/MvuHOJqglVhFN33UKlAo7Cg8MgS\nBAsei0AjSRhBT4AR9AQwpAfADEgaDBAkSSeAoAy2qORiUC14T9TPCfXW0t852QAAAAAAAAAAAAAA\nAAAAAAAA1GwHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCzHQAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAzXYAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADXbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAADUbAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAULMdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDN\ndgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdsBAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANRsBwAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQsx0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAQM12AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAA12wEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1GwHAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCzHQAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAzXYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAADXbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAADUbAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAULMdAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDNdgAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAANRsBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAABQsx0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQM12\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA12wEAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1GwHAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCzHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAABAzXYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADXbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUbAcAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAULMdAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDNdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAANdsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAANRsBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQsx0AAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQL16xNP379/39u3bR7wGAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+CjNdgAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANdsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAANRsBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAABQsx0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQM12\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA12wEAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1GwHAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFCzHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAABAzXYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nADXbAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADUbAcAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAULMdAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEDNdgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAANdsBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAANQ8Z3TO+cU550/nnD+ec351zvn6o8MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAXpJ5anDO+U718+rNvfd71deqnzw6DAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAOAlmWfuXlXfOOe8qj6p/va4JAAAAAAAAAAAAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAICXZ54a3Hv/Wv2y+rL6e/XPe+9vvro75/zsnPPFOeeLd+/e\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108ddf2b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot ground truth signal Y and signal y_pred predicted by model.\n",
    "# In Copy task these two signals should be very close. \n",
    "\n",
    "grid_img_truth = vutils.make_grid(Y, normalize=True, scale_each=True)\n",
    "grid_img_pred = vutils.make_grid(y_pred, normalize=True, scale_each=True)\n",
    "\n",
    "plt.figure(figsize=(200,200))\n",
    "plt.imshow(grid_img_truth.data.permute(2, 1, 0))\n",
    "\n",
    "plt.figure(figsize=(200,200))\n",
    "plt.imshow(grid_img_pred.data.permute(2, 1, 0))"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
